Technical Note TN2035
ColorSync on Mac OS X

ColorSync は、Mac OS X では新しい役割を担います。以前のバージョンでは、インストールは任意でしたが、Mac OS X では基本機能として OS に組み込まれています。カラーマネージメントは今日、利用者の体験にとって非常に重要です。ColorSync は、Mac OS X グラフィックス環境である Quartz によって非常に細かく利用されるほか、ColorSync と共に、プリンタドライバにカラーマッチングサービスを提供するために、出力に至るまでの全過程で使用されます。





概要

今日市場には、デジタルカメラ、カラースキャナ、カラープリンタなど、さまざまな種類のイメージングデバイスがあり、それぞれ大きく異なる方法で色を表現します。カラースペース(色空間)と色域(色の範囲)はデバイスごとに異なります。このために当然、あるデバイスで取得した文書を、ほかのデバイスに正しくレンダリングするのは非常に難しくなります。この問題に対する解決策が、異種のデバイス間で一貫した色を提供することを目的とした完全なカラーマネージメントシステム、ColorSync です。

ColorSync 技術を支える 2 つの主要な要素は、ICC(International Color Consortium、国際カラーコンソーシアム)プロファイルと CMM(Color Management Modules)の 2 つです。

ICC プロファイル

ICC プロファイルは、ICC によって定義されているクロスプラットフォームのファイル形式で、デバイスの色空間から中間の色空間に色を変換する方法を記述したデータを含む文書です。このファイル形式では、さまざまな種類のデバイスの記述が可能です。データ形式は、極めて柔軟なものになるように作られており、開発者はオプションタグを使って形式を拡張できます。また、この形式は、絶えず改良されており、進化し続けています。

先頭に戻る

CMM

プロファイルをカラーマネージメントに使うデータと考えるとすれば、CMM はコードです。CMM は、プロファイルからプロファイルへの変換を行う計算エンジンです。アップルでは、ColorSync の一部として、標準の CMM である Apple CMM を出荷しています。これは、アップルが、Mac OS 9 で出荷する標準の CMM と同じです。 ただし、このシステムは、オープンで拡張可能なものとして設計されています。したがって、独自に色変換の手段を提供したい第三者も、独自に CMM を開発することができます。

次に、ColorSync が、Mac OS X のアーキテクチャにどのように組み込まれているかを示します。

Mac OS X Architecture & ColorSync.

図 1. Mac OS X アーキテクチャと ColorSync

Mac OS X は、ColorSync 2.0 またはそれ以降の API を完全サポートしています。これは、開発者が、自分のアプリケーションを Mac OS X に移植するのが非常に簡単であることを意味します。Mac OS X の ColorSync には、利用すると便利ないくつかの強化機能を提供する新しい API もあります。また、Mac OS X の Quartz と印刷モデルは、ColorSync を最大限に活用しています。

先頭に戻る

ColorSync と Quartz

Mac OS X において、ColorSync には、単なる標準アプリケーションサービスを超えた新たな役割が与えられています。ColorSync は、ほかのシステムコンポーネントにカラーマネージメントを提供するのに使われるようになっています。これらのコンポーネントの 1 つに、PDF のイメージングモデルに基づいたアップルの新しいグラフィックスシステム、Quartz があります。Quartz は、カラーマネージメントの新しいパラダイムを作り、ColorSync 機能にアクセスするもう 1 つの手段となっています。

ColorSync と Quartz のカラーマネージメント

ここでの我々の目的は、いくつかの基本要件を満たしながら、グラフィックスサービスとカラーマネージメントサービスを統合することです。まず、Quartz には、さまざまな色空間と不透明度を組み合わせる機能が必要でした。この要件を満たすために、ColorSync が、多種多様の色空間のデータを、Quartz がコンポジターの作業空間として選択した色空間に変換するのに使われます。

2 番目の要件は、開発者のニーズに重点を置いたもので、Quartz を使うすべてのアプリケーションが、カラーマネージメントを行う必要があるという事実に基づいています。これも、広範な種類のアプリケーションのニーズに応える、スケーラブルなソリューションでなければなりません。アプリケーションのカラーマネージメントへの関与が、Quartz により事前に定義されているいくつかのデフォルトの設定に限られた必要最小限なものになることもあります。または逆に、アプリケーションが、カラーマネージメントに対して、直接 ColorSync にアクセスするときと同等の完全なコントロールを握ることもあります。その他の要件としては、色の精度、パフォーマンス、および PDF との互換性などがあります。

簡単にいえば、Quartz のカラーマネージメントは、Quartz の作成する PDF の色データを処理するエンジンとして使われる ColorSync を中心にして構築されているといえます。

Quartz Color Management.

図 2. Quartz カラーマネージメント

先頭に戻る

PDF の色モデル

この構成についてさらに理解するため、次に PDF および ColorSync の色に関する基本的な考え方を取り上げます。

PDF の色定義

PDF では色は、デバイスの色空間、補正(キャリブレート)された色空間、および ICC ベースの色空間という既知の色空間のいずれかによって定義されます。

表 1. PDF の色空間

PDF の色空間
/DeviceGray、/DeviceRGB、/DeviceCMYK
/CalGray、/CalRGB、/CalLab
/ICCBased

上記のリストは実質的に、カラーマネージメントの歴史を反映しています。最初は、デバイスの色空間だけがサポートされていました。今日となっては、デバイスの色空間は、さまざまなプロセス色モデルに対して 1 つの仕様を提供するものでしかありません。色の見え方はデバイスに依存しているので、デバイスの色空間は、異種のデバイス間で忠実に色を再現するには最悪の選択です。

次に、デバイスに依存しない色を使った色変換という考えの基に、色をキャリブレートするという方法が考案されました。この方法の利点は、異種デバイス間のカラーマッチングが大幅に改善されることです。その後に PDF のキャリブレートされた色空間が続きます。後に、キャリブレートされた色は、PDF のキャリブレートされた色、標準の形式、つまり ICC プロファイルへと発展しました。ICC プロファイルに基づいたカラーマネージメントが普及してきて、色の専門家の間で、事実上の標準となると、PDF は、ICC ベースの色空間を追加し、ICC プロファイルを PDF 文書に埋め込めるようにしました。

先頭に戻る

PDF の色変換

PDF の色変換は、ソースの色空間、出力先の色空間、およびレンダリングインテントの関数として表せます。次のレンダリングインテントの値に注意してください。

PDF Color Conversion.

図 3. PDF の色変換

先頭に戻る

ColorSync/ICC の色モデル

次に、ICC と ColorSync の色と色変換がどのように定義されているかを見てみましょう。

ICC の色定義

色は当然ながら、ICC プロファイルにより定義されます。前述のとおり、ICC プロファイルは、色空間の記述では最も一般的な形式です。

先頭に戻る

ICC の色変換

ICC 色変換は、PDF の色変換と非常によく似ています。違いは、ソースと出力先のプロファイルの間に中間プロファイルを挿入できる点です。

ICC Color Conversions.

図 4. ICC の色変換

これらの追加のプロファイルは、ソフトプルーフ(色校正)、カラーデバイスのシュミレーション、特殊効果の適用などのために使用されます。図に示したように、ICC の色変換のレンダリングインテントの値は、PDF のレンダリングインテントの値と同じです。

レンダリングインテント = {知覚的, 相対的測色, 彩度, 絶対的測色}

先頭に戻る

Quartz の色モデル

PDF の色モデルと ICC の色モデルの統合

Quartz の色モデルは、ICC の色モデルと PDF の色モデルを統合することによって作られました。このモデルの興味深い特徴を次に示します。Quartz では、PDF の色空間はすべて ICC プロファイルとして表されます。デバイスの色空間には次のようにデフォルトのプロファイルが割り当てられます。

  • /DeviceGray -> Quartz Default Gray

  • /DeviceRGB -> Quartz Default RGB

  • /DeviceCMYK -> Quartz Default CMYK

キャリブレートされた色空間には、キャリブレーションレコードが含まれています。このレコードは、ICC プロファイルとして非常に簡単に再パッケージ化できます。最後に、ICC ベースの色空間は、自身の ICC プロファイルを提供します。

PDF の色空間の等価性

Quartz が PDF から継承したもう 1 つの単純ながら非常に重要な概念は、色空間の等価性の概念です。色変換は、ソースの色空間が出力先と異なる場合にだけ必要になるという暗黙のルールがあります。Quartz はこの単純なルールを利用して、複数のレンダリング段階からなる色データの流れを正しく構成します。

Color space equivalence

図 5. 色空間の等価性

先頭に戻る

1 つまたは複数の ICC プロファイルから構成される色空間

前述したように、Quartz では、すべての PDF の色空間が、PDF のイメージングモデルのもとで動作しているすべてのアプリケーションの間でシームレスかつ透過的な形で、1 つの ICC プロファイルとして表現されています。しかしそれと同時に、Quartz には 3 つ以上のプロファイルのための色変換を作成する機能が必要でした。このため、1 つ以上の ICC プロファイルで構成することができる色空間が設計されました。これにより、1 つのソースを 1 つの出力先に対応させるという PDF の考え方を維持できると同時に、高度なカラーマネージメントに適した複雑な色変換を作成できます。このような色空間を PDF に埋め込む必要が生じた場合は、色空間に含まれている複数のプロファイルは、ColorSync により 1 つのプロファイルに結合されます。

先頭に戻る

Quartz の描画モデルにおける色処理

今度は、Quartz の描画モデルにおいて、これまで記述したすべてのものが実際にはどのような形で合わさって、望みの色の処理を行うのかを見てみましょう。最も高い視点から見たとき、このモデルには、3 つの主要コンポーネントがあります。

  • グラフィックコンテンツを生成するアプリケーション

  • レンダリングサービスを提供する Quartz

  • ラスタデータの出力先

色の処理においては、アプリケーションは、PDF の任意の色空間を使ってデータをレンダリングするよう Quartz に 要求できます。Quartz はこれを行うために、すべての PDF の色空間を ICC プロファイルに変換します。デフォルトのプロファイルは Quartz により選択されますが、アプリケーションはこれをオーバーライドすることもできます。Quartz は、作業空間においてすべての合成を行い、ColorSync が、ソースの任意の色空間から作業空間への色変換を行うために呼び出されます。最後に、合成作業が終了すると、ラスタデータは、指定の出力先へ送られます。もちろん、出力先の色空間が作業空間と一致していない場合には、さらに変換を行わなければなりません。

いくつかの色処理を例に、Quartz のカラーマネージメントがどのように便利かを見てみましょう。たとえば、すべてのデータに特殊効果を適用する場合、抽象プロファイルを作業空間に追加するだけで非常に簡単に実現できます。次の図に示すように、どの作業空間への変換にも、抽象プロファイルを定義する変換が含まれます。

Applying Special Effects with Abstract Profile.

図 6. 抽象プロファイルに対する特殊効果の適用

別の例としては、ソフトプルーフが考えられます。この場合にしなければならない唯一のことは、プリンタプロファイルを作業空間に追加することだけです。これにより、プリンタプロファイルを定義するすべての色補正が作業空間に反映され、標準ディスプレイ上に表示されます。

Soft-proofing Printout on Primary Display.

図 7. 標準ディスプレイ上での印刷出力のソフトプルーフ

複数のプロファイルからなる色空間を使用できるのは、Quartz 内部に限られません。アプリケーションもまた、使用できます。次に、特定の色効果を演出するために、特定の色空間を使って、自由変形の色空間を作成するアプリケーションの例を示します。

Free-transform color space used to produce color effects.

図 8. 自由変形色空間を使用した色効果の演出

先頭に戻る

Quartz の出力のフロントエンド

Quartz のカラーマネージメントに関する説明の最後として、Quartz からの印刷時に色がどのように処理されるかを見てみましょう。これまで、ソースから出力先までの色データの主な流れについて説明しました。しかしここでは、さらにもう 1 つの処理が可能です。データ内容は、印刷用に PDF 形式でスプールすることができます。スプールされた内容は、プリントセンターによって処理されます。スプールされたデータに関して非常に重要な事実が 1 つあります。すでに指摘したとおり、PDF のスプールデータでは、すべての色データにタグが付けられます。ColorSync による処理の場合とまったく同じように、データにプロファイルが割り当てられます。

Color data is tagged in spooled PDF.

図 9. PDF のスプールデータはタグが付けられる

先頭に戻る

Quartz のラスタ印刷のバックエンド

ColorSync のカラーマッチング

Quartz は、この PDF のスプールデータを、印刷のバックエンドでラスタライズするためにも使われます。カラーマネージメントの観点から、この段階における選択肢は 2 つあります。最初の選択肢は、ColorSync を使ってカラーマッチングをすることです。この場合、PDF のスプールデータの色データはすべてプリンタプロファイルに変換されます(注意:スプール PDF にはデバイスデータはありません)。

Spooled PDF converted to printer profile.

図 10. プリンタプロファイルに変換されるスプール PDF

先頭に戻る

カスタムドライバカラーマッチング

もう 1 つの選択肢は、ユーザ定義のドライバによるカラーマッチングです。色データは、システムが提供するデフォルトプロファイルの色空間において引き渡されます。その結果、同じデフォルトプロファイルのタグが付けられているすべてのデータは、そのまま残ります。その他の色データは当然、ColorSync によりシステムプロファイルに変換されます。

Custom driver color matching.

図 11. カスタムドライバカラーマッチング

先頭に戻る

PostScript のバックエンドにおける Quartz

ColorSync は、PostScript のバックエンドでも使われます。カラーマネージメントの観点から、ここでの目的は、スプールされた PDF に含まれている色空間を、PostScript の色空間配列(CSA)に変換することです。Quartz には、PDF のキャリブレートされた色空間を、直接 PostScript の CSA に変換する機能が組み込まれています。すべての ICC プロファイルが、ColorSync を使って PostScript の CSA に変換されます。

ICC profiles converted to PostScript CSAs.

図 12. PostScript CSA に変換される ICC プロファイル

 

先頭に戻る

タグなしデータの印刷

タグなしデータの印刷時におけるプリントシステムの動作に関する一般注意事項を以下に示します。

PDF の表示

PDF 内のタグなし RGB データは、汎用 RGB プロファイルでタグ付けされるため、スクリーンに対してカラーマッチングされます。

先頭に戻る

印刷のフロントエンド

ソースデータをプリントシステムに渡すとき、印刷フロントエンドではプリントジョブが PDF 形式でスプールされます。そして、前述の「Quartz の出力のフロントエンド」で説明したように、スプール PDF では色データがすべてタグ付けされます。したがって、タグなしの RGB ソースデータを印刷のためにプリントシステムに渡すと、ColorSync はデータを汎用 RGB プロファイルでタグ付けします(PDF データの表示のときと同じ)。

先頭に戻る

印刷のバックエンド

Mac OS X での印刷時には、ColorSync によってソースデータが、プリンタドライバの提供する任意のプロファイルを使ってマッチングされます。そのため、プリンタドライバはこのテクニカルノートで説明する Device API を使用してデバイスに対応するプロファイルを登録する必要があります。

先頭に戻る

ラスター印刷

プリンタドライバがプロファイルを提供しない場合、ColorSync は汎用 RGB プロファイルを代わりに使用します。

先頭に戻る

PostScript 印刷

元々タグ付けされていない RGB データは最終的には、汎用 RGB プロファイルに基づいて CIEBasedABC 色空間に変換されます。

先頭に戻る

複数スクリーンへの描画

「ColorSync と Quartz」のセクションで説明したように、Quartz では幅広い種類の ICC ベースの色空間が提供されます。このセクションでは、ColorSync デバイス統合化データベースへのアクセスを可能にする色空間を取り上げます。

その例としては、スクリーンへの直接の描画を可能にする色空間があります。まず、Display RGB 色空間があります。これは、実質的には標準ディスプレイプロファイルに対するラッパーです。また、2 つのプロファイルで構成される Display Gray があります。これは、グレーを RGB に変換するデバイスリンクプロファイルであり、標準ディスプレイプロファイルにアタッチされます。そしてさらに高度な用途のために、Display with ID 空間があります。これは、Display By AVID プロファイルに対するラッパーです。

Color spaces which allow for drawing directly to the screen.

図 13. スクリーンへの直接の描画を可能にする色空間

Mac OS X v10.3 "Panther" の Quartz は、複数のスクリーンへの描画にかかわる問題の解決に役立ちます。アプリケーションには、3 つの基本的な選択肢があります。1 つは「単純モデル」と定義できるものです。もう 1 つは「完全モデル」と定義できます。最後の 1 つは、この 2 つの技法を組み合わせたものです。

これらは、次の特徴を持っています。

アプリケーションの選択肢

単純モデル

  • メインディスプレイに対してのみカラーマッチングされる

  • アプリケーションは、スクリーンとプロファイルの変更時に更新をしない

完全モデル

  • 個々のディスプレイに合わせてカラーマッチングされる

  • アプリケーションは、スクリーンとプロファイルの変更の通知を受け取れるように登録し、必要に応じて正しい更新を行うことができる

上記の何らかの組み合わせ

  • アプリケーションは上記の 2 つの技法の組み合わせを使用できる

先頭に戻る

Mac OS X 上のプロファイル

Mac OS 9 では従来より、プロファイルは、「System」フォルダの「Profile」フォルダに格納されます。このフォルダにアクセスする必要があるアプリケーションでは、次のように、CMGetColorSyncFolderSpec API を使って、vRefNum パラメータに kSystemDisk を渡します。

CMGetColorSyncFolderSpec(kSystemDisk, ...);

同等の手法として、Mac OS FindFolder API を使うこともできます。しかし、Mac OS X の主な特徴の 1 つは、ネットワークとマルチユーザに完全に対応するように設計されていることです。このため現在では、プロファイルが格納される場所は 1 つだけはなく、数カ所に及びます。Mac OS X の「System」フォルダにはプロファイル用の特別の場所があります。

/System/Library/ColorSync/Profiles/

これは、ほかのプロファイルが間違って失われたり損傷を受けたりした場合に、ColorSync が、重要な処理を行うために内部で使うプロファイルを格納する場所です。このフォルダは、ロックされ保護されていますが、ファイルを読み込めるようにこのフォルダにアクセスする必要がある場合は、次のように、CMGetColorSyncFolderSpec API を使用し、vRefNum パラメータに kSystemDomain 定数を渡します。

CMGetColorSyncFolderSpec(kSystemDomain, ...);

ColorSync プロファイルは主に次の場所に格納されます。

/Library/ColorSync/Profiles/

これは、ColorSync が、プロファイルのほとんどを格納する場所です。これは読み書き可能なフォルダです。プロファイルを読み込めるようにこのフォルダにアクセスする必要がある場合は、次のように、CMGetColorSyncFolderSpec API を使って、vRefNum パラメータに kLocalDomain 定数を渡します。

CMGetColorSyncFolderSpec(kLocalDomain, ...);

ネットワーク環境の中で、ネットワーク管理者がネットワーク上に、ネットワークデバイスのプロファイルを格納している場合は、次の場所に格納することができます。

/Network/Library/ColorSync/Profiles/

これらのプロファイルを読み込めるようにこのフォルダにアクセスする必要がある場合は、次のように CMGetColorSyncFolderSpec API を使って、vRefNum パラメータに kNetworkDomain 定数を渡します。

CMGetColorSyncFolderSpec(kNetworkDomain, ...);

最後に、ユーザは、各自のホームディレクトリに、各自のプロファイルを格納することができます。

‾/Library/ColorSync/Profiles/

これらのプロファイルを読み込めるようにこのフォルダにアクセスする必要がある場合は、次のように CMGetColorSyncFolderSpec API を使って、vRefNum パラメータに kUserDomain 定数を渡します。

CMGetColorSyncFolderSpec(kUserDomain, ...);

Mac OS 9 と同じように、Mac OS X の ColorSync も、上記のディレクトリにあるサブフォルダ(1 つ下の階層)、またはこれらのフォルダまたはプロファイルのエイリアスの検索をサポートしています。つまり、Mac OS X には、プロファイルを格納できる場所が非常に多くあります。アプリケーションでユーザにプロファイルの一覧を提示したければ、CMIterateColorSyncFolder API を使うことをお勧めします。この API は、上記のすべての場所を対象にプロファイルを検索するので、コードが大幅に簡素化されます。さらに、頻繁に使用する情報をキャッシュするので、パフォーマンスの上で大きな利点を提供します。

この API に関して記述すべき 1 つの重要な点は、Mac OS X システムに加え、Mac OS Classic のシステムフォルダを用意している場合、ColorSync はデフォルトでは、プロファイルの検索時、Mac OS Classic のシステムフォルダの中を探しません。ただし、アプリケーションがこの場所のプロファイルにアクセスする場合には、CMIterateColorSyncFolder API を使って、vRefNum パラメータに kClassicDomain を渡します。

CMGetColorSyncFolderSpec(kClassicDomain, ...);

要約すると、アプリケーションは、次の場所、またはそのサブフォルダにプロファイルを置くようにするとよいでしょう。

/Library/ColorSync/Profiles/

ユーザは、個人のプロファイルを次の場所に置くことができます。

‾/Library/ColorSync/Profiles/

プロファイルに関する要件

Mac OS 9 では従来より、プロファイルは、ファイルタイプとクリエータ(タイプ - 'prof'、クリエータ - 'sync')に基づいてフィルタ処理されていました。しかし、プロファイルに、ファイルタイプとクリエータがない場合もあるので、ColorSync は今では、プロファイルのファイルタイプとクリエータは調べません。また、プロファイルは、拡張子を持つ必要もありません。ただし、拡張子を使用する場合には .icc を使うようにします。1 つの拡張子に統一することで、Cocoa の NSOpenPanel API を使うアプリケーションは、より簡単にプロファイルのフィルタ処理を行えるようになります。同様に、プロファイルにファイルタイプとクリエータを使う場合は、'prof' と 'sync' を使います。Carbon の Navigation Services API を使ったプロファイルのフィルタ処理が簡単になるからです。しかし実際には、ColorSync は現在、ファイルタイプ、クリエータ、または拡張子については考慮しません。

ColorSync プロファイルと旧式のファイルの実際の違いは、正当な ICC プロファイルであるかどうかという点です。ColorSync は、ヘッダブロックの適切なオフセット位置に、署名バイトの並び、acsp(a ColorSync profile の頭字語)があるかどうかを調べることで、ファイルが正当な ICC プロファイルであるかどうかを調べます。さらに ColorSync では、プロファイルは有効な記述タグを持たなければならないという制限があります。多くのアプリケーションは、プロファイルの一覧をユーザに提示しますが、記述タグにあるプロファイルの名前がおかしければ、正しく表示されないか、まったく表示されません。これらの問題を避けるには、ColorSync Profile First Aid ユーティリティを使って、プロファイルに一般的な間違いがないよう確認することをお勧めします。

先頭に戻る

新しい省略可能なプロファイルのタグ

Mac OS X の主な特徴の 1 つは、Mac OS X が、多言語対応のオペレーティングシステムであることです。ColorSync は、ICC プロファイルにも同じ機能を提供するようになりました。現在、ICC のファイル形式は、表示の目的で、プロファイルの記述を ASCII、UniCode、および ScriptCode のそれぞれで格納する必須タグ、'desc' を定義します。しかし、この構造では、UniCode または Script を使った場合にだけ、プロファイルを、特定の言語にローカライズできます。プロファイルのベンダは、さまざまな国に向け多数のローカライズバージョンを出荷しなければなりません。また、ローカライズされたプロファイルを埋め込んだ文書を、違う言語を使うシステムに移したときにも問題が生じます。ColorSync は、この状況を是正するために、新しい省略可能なタグを定義しました。

- 'mluc' 多言語対応の UniCode タグ

このタグには、プロファイルに対応付けられている、多言語による Unicode 文字列のセットが含まれています。また、このタグに簡単にアクセスできるようにいくつかの新しい API も提供されています。

CMError CMCopyProfileLocalizedStringDictionary
  (CMProfileRef prof, OSType tag, CFDictionaryRef* dict);

prof - 照会対象のプロファイル。

tag - 照会対象プロファイルのタグのタイプ。

dict - 辞書を返します。

この API により、指定のタグから、多言語対応のロケールと文字列を含む CFDictionary を取得できます。同様に、プロファイルの特定のタグにローカライズ文字列の辞書を書き込むための CMSetProfileLocalizedStringDictionary API もあります。

CMError CMSetProfileLocalizedStringDictionary
  (CMProfileRef prof, OSType tag, CFDictionaryRef dict);

prof - 修正対象のプロファイル。

tag - 修正対象プロファイルのタグのタイプ。

dict - 修正対象の辞書。

しかし、ほとんどのアプリケーションでは、プロファイルから 1 つの特定の文字列だけを取得することが要求されます。このために、CMCopyProfileLocalizedString 関数が提供されています。

CMError CMCopyProfileLocalizedString (CMProfileRef  prof,
                                      OSType        tag,
                                      CFStringRef   reqLocale,
                                      CFStringRef*  locale,
                                      CFStringRef*  str);

prof - 照会対象のプロファイル。

tag - 照会対象プロファイルのタグのタイプ。

reqLocale - 要求されたロケール(省略可能)。

locale - ロケールを返す(省略可能)。

dict - 辞書文字列を返す(省略可能)。

次に、この関数の使用法を示す短いコード例を示します。reqLocale パラメータに、省略可能な 'dscm' と "enUS" のタグを渡して、US 英語の文字列を探します。US 英語の文字列が見つからなかった場合、ColorSync はしかるべきデフォルトを使います。

err = CMCopyProfileLocalizedString (prof, 'dscm', CFSTR("enUS"), nil, &theStr);

先頭に戻る

ICC4 プロファイル

ICC は、プロファイルがより優れた柔軟性と強化された機能を提供できるように、新しいファイル形式に取り組んできました。この新しいファイル形式とは、ICC 4.0 プロファイルの形式仕様です。次に、最も特徴的な点をいくつか示します。

  • ヘッダに新しくバージョンが加わりました。

以前のバージョンと区別するためのものです。

  • ヘッダに新しく MD5(message digest)のチェックサムが加わりました。

2 つのプロファイルが同じかどうか、つまり時間の経過に伴ってプロファイルに変更が加えられたかどうかを判断するためのものです。プロファイルヘッダにあるこの新しい MD5 のチェックサムには直接アクセスできるほか、ColorSync の新しい API である CMGetProfileMD5 もあります。この ColorSync API は、ICC 4 プロファイルおよび前のバージョンのプロファイルの両方に使えるという利点があります。

  • 新しいタグデータタイプ('mluc'、'mBA '、'mAB '、'para')

これらの新しいタグは ICC 4 プロファイルの新しい機能と柔軟性を実によく示しています。1 つ重要なことは、既存のタグのいくつかにも、これらの新しいデータ形式を含められるようになったことです。たとえば、'A2B0' に、 'mft1' または 'mAB ' のデータを含めることができます。幸いなことに、ColorSync とアップルの CMM は、完全に ICC4 対応です。つまり、アプリケーションが、プロファイルを解析せず、カラーマッチングのためにプロファイルの参照を使うに過ぎない場合でも、すべてうまくいきます。しかし、アプリケーションがプロファイルを修正したり作成したりする場合は、これらの新しいタグタイプを考慮して正しく処理できるようにしておく必要があります。

先頭に戻る

Mac OS X における CMM

プロファイルと同様、CMM も複数の場所に置くことができます。通常、アプリケーションは、CMM を次の場所に置きます。

/Library/ColorSync/CMMs

また、ユーザは、次の場所に個人の CMM (デバッグ用の CMM など)を置くことができます。

‾/Library/ColorSync/CMMs

アプリケーションにおいてユーザに CMM の一覧を提示したい場合には、CMMIterateCMMInfo API を使います。詳細については、テクニカルノート TN1160「What's New With ColorSync 2.6」を参照してください。この API でデフォルトの CMM を含め、システムにインストールされているすべての CMM の情報を取得できます。

CMM の構築

Mac OS X の CMM は、CFBundle ベースです。一方、Mac OS 9 の CMM は、Component Manager ベースです。CFBundle の API を使って CMM を CFBundle として構築する方法の詳細については、CFBundle に関する文献を参照してください。

Mac OS X の CMM には、CMMOpenCMMConcatCMMMatchBitmapCMMClose など、Mac OS 9 の CMM で使われていてなじみのあるエントリポイントがまだすべて含まれています。ただし、Mac OS X の CMM は現在、これらのエントリポイントに対して、Component Manager のラッパの代わりに、CFBundle のラッパを使います。

Apple CMM には多くの労力をかけて、さまざまなプロファイルのタイプおよびイメージデータ用の色空間をすべて正しく処理できるよう、微調整し Quartz と完全に統合するようにしました。独自の CMM を記述する場合は、必ず、さまざまな状況を想定して徹底的にテストをして、この環境で確実に機能するようにします。

先頭に戻る

ColorSync の環境設定と API のサポート

Classic Mac OS では、カラーマネージメントを実行するアプリケーションは通常、システム上の各種デバイスの情報を持っていません。このため、アプリケーションでは、ユーザからデバイスの色情報を取得するために、何らかのインタフェースを提供する必要があります。同様に、プロファイルが対応付けられていないデータに対してカラーマネージメントを実行するアプリケーションは、そのデータを生成したデバイスのタイプを知る必要があります。この場合も、ユーザが色空間または文書のデフォルトのプロファイルを選択できるように何らかのインタフェースを提供する必要があります。ユーザは、時間が経つにつれ、カラーマネージメントを実行するアプリケーションが提供する実に多種多様のインタフェースに混乱し始めました。Mac OS X の ColorSync は、システム上のデバイスを認識するようになり、ColorSync ユーザインタフェースは、この情報を活用するように再設計されました。

標準の色空間のためのプロファイル

文書には当然ながら、多種多様のデータ形式が含まれています。このメニューを使えば、ユーザは、さまざまな色空間のための文書プロファイルを指定できます。もちろん、文書にプロファイルがある場合はそのプロファイルが優先されます。しかし多くの場合、文書にはプロファイルが対応付けられていません。ユーザは、次のように、CMGetDefaultProfileBySpace API を使ってデフォルトの環境設定を取得できます。

enum {
        cmXYZData = 'XYZ ',
        cmLabData = 'Lab ',
        cmRGBData = 'RGB ',
        cmSRGBData = 'sRGB',
        ...
    };

CMGetDefaultProfileBySpace ( OSType space, CMProfileRef* prof );

space - 色空間。

prof - 指定した色空間のデフォルトのプロファイルを返します。

次に、アプリケーションが、これらの API を使うことで得られるメリットを示すコード例を示します。このコードは、イメージ参照を入力として受け取り、この参照に基づいて情報またはデータを取得しようとしています。文書のカラーマネージメントを行うときに、アプリケーションがまず行わなければならないのは、文書にプロファイルが埋め込まれているかどうかを確かめることです。今日のイメージ形式のほとんどは、プロファイル用のコンテナを持っているので、これらの形式の文書のプロファイルを取得する既知の方法もあります。しかし、文書に対応付けられているプロファイルがなかった場合には、最初に画像の色空間を取得した後、CMGetDefaultProfileBySpace API を使えば簡単に、文書のためにしかるべきデフォルトのソースプロファイルを取得できます。

次に、文書の出力先プロファイルを取得します。CMGetDefaultProfileByUse を使えば、出力先のプロファイルを取得できます。ソースのプロファイルと出力先のプロファイルの両方がそろったら、カラーマネージメントを実行できます。この場合には、NCWNewColorWorldCWMatchBitMap を使います。

この例に関して重要なことは、示されているコードは、Mac OS 9 で動作する Mac OS の Classic アプリケーションまたは Carbon アプリケーションに適切なコードであるという点です。Mac OS X では、出力先のカラーマネージメントの大部分は自動的に行われるので、アプリケーションが Quartz を使う場合には、出力先のためのプロファイルの対応付けは必要はありません。ただし、少なくともデータがどのデバイスからのものかは知っておく必要があり、プロファイルが対応付けられていない場合には、ColorSync API を使って対応させることができます。

「ColorSync」環境設定のためのコード例

CMError myMatchImage (myImageRef image)
{
    CMProfileRef source, dest;
    CMWorldRef cw;
    CMBitMap bm;

    source = myGetEmbeddedProfile (image);
    if (source == nil)
    {
        space = myGetColorImageSpace (image);
        err = CMGetDefaultProfileBySpace (space, &source);
    }

    err = CMGetDefaultProfileByUse (cmDisplayUse, &dest);
    err = NCWNewColorWorld (&cw, source, dest);
    bm = myGetImageBitMap (image);
    err = CWMatchBitMap (cw, &bm, ..., ..., ...);
...

先頭に戻る

「ColorSync」環境設定に関するヒント

Mac OS 9 の ColorSync 3.0 と同様、Mac OS X の ColorSync を使うアプリケーションも、「ColorSync」コントロールパネルを起動して、デバイスと文書のためのデフォルトのプロファイルなどの色に関する選択、および優先する CMM 環境設定の指定ができます。ユーザは、ワークフローと呼ばれる、名前付きの色設定間の切り替えを行うこともできます。

アプリケーションから ColorSync を起動するには、次の関数を呼び出すだけです。

pascal CMError CMLaunchControlPanel (UInt32 flags);

flags - このパラメータには 0 の値を渡さなければなりません。ColorSync の今後のバージョンでは、この flags パラメータに、ColorSync コントロールパネルの起動方法を指定する定数を定義することになるでしょう。

関数の結果 - CMError 型の結果コード。

アプリケーションで CMLaunchControlPanel ルーチンを呼び出した場合、ユーザの行った変更は、ユーザが ColorSync コントロールパネルを閉じるまで、CMGetDefaultProfileBySpace などの呼び出しを使っても取得できません。ColorSync コントロールパネルが閉じられたかどうかを確かめる ColorSync API はありませんが、Mac OS 9 では、Process Manager API を使って確かめることができます。

先頭に戻る

「ColorSync」環境設定に関するまとめ

Mac OS X ではすべてのデータが Quartz によってカラーマネージメントされるので、アプリケーションは、ソースデータと出力先データにプロファイルが対応付けるだけで、その恩恵を受けることができます。ほとんどのアプリケーションはカラーマネージメントのために、ColorSync Preferences API を使ってユーザの環境設定を取得できます。プロファイルにアクセスするためのこれらの API は拡張可能で、将来のデバイスと色空間のサポートに対する橋渡し役となります。最後に、ColorSync Preferences API は、アプリケーションが、文書またはデバイスのどちらの観点からもカラーマネージメントできるという点で、優れた柔軟性を提供します。

先頭に戻る

ColorSync のデバイスサポート

Mac OS X には、入力、表示、および印刷のための複数の新しいデバイスマネージャが組み込まれています。これにより、開発者は、ColorSync との組み合わせにより、デバイスを認識させたり、デバイスのプロファイルへのアクセスを提供したりできます。この新しいデバイスサポートには、次のサービスが実装されています。

  • デバイスの登録

  • プロファイルの登録

  • デフォルトのデバイスとデフォルトのプロファイルへのアクセス手段

  • 通知

デバイスとプロファイルの登録

ColorSync は、デバイスの有無を検出し、またデバイスのプロファイルを検索または構築する上で、デバイスマネージャに依存しています。次に、デバイスとプロファイルに関する情報を取得するために使用できる新しい ColorSync API を示します。

CMRegisterColorDevice

CMError
CMRegisterColorDevice(
  CMDeviceClass          deviceClass,
  CMDeviceID             deviceID,
  CFDictionaryRef        deviceName,
  const CMDeviceScope *  deviceScope);

パラメータ

deviceClass

デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。

deviceID

クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。

deviceName

デバイスの名前。

deviceScope

このデバイスが関係するユーザとホストのスコープを定義する構造体。

デバイスが、ColorSync (および MacOSX のほかの部分)で認識されるには、この API を使って自身を登録する必要があります。デバイスに、ColorSync プロファイルが対応付けられている場合には、デバイスの登録後、CMSetFactoryDeviceProfiles API を使ってプロファイルを指定しなければなりません。登録したデバイスは、プロファイルが対応付けられている限り、ColorSync コントロールにおいて、入力デバイス、出力デバイス、または校正デバイスとして表示されます。登録は、デバイスのインストール時に一度行うだけで十分です。デバイスドライバは、ロードのたびに、デバイスの登録を行う必要はありません。

CMUnregisterColorDevice

CMError CMUnregisterColorDevice
(
 CMDeviceClass    deviceClass,
 CMDeviceID    deviceID
);

パラメータ

deviceClass

デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。

deviceID

クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。

デバイスを、(オフラインにするのではなく)今後システムで使用しないという場合には、登録を解除しなければなりません。デバイスを、一時的に停止したり接続を解除したりする場合には、登録を解除する必要はありませんが、デバイスドライバが、1) 今後使用しない(取り外す)ことが分かっている場合、または 2) デバイスなしにはそのプロファイルにアクセスできない場合、デバイスの登録を解除しなければなりません。

CMSetFactoryDeviceProfiles

CMError CMSetFactoryDeviceProfiles
(
 CMDeviceClass        deviceClass,
 CMDeviceID        deviceID,
 CMDeviceProfileID    defaultID,
 const CMDeviceProfileArray*    deviceProfiles
);

パラメータ

deviceClass

デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。

deviceID

クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。

defaultID

このデバイスのデフォルトプロファイルの ID。

deviceProfiles

プロファイルの配列を格納する呼び出し側の記憶領域へのポインタ。

この API は、指定のデバイスにより使用されるプロファイルを設定します。この API は、デバイスの登録後、ColorSync にデバイスのプロファイルについて通知するために呼び出す必要があります。ファクトリデバイスプロファイルと現在のデバイスプロファイルでは API が区別されています。後者にはファクトリセットに対する変更が含まれている場合があるからです。

デフォルトのデバイスとデフォルトのプロファイル

プロファイルおよび標準装置のためのこれらの新しい API は、任意のデバイスプロファイルへのアクセスではなく、デフォルトへのアクセスを提供します。デバイスのプロファイルを登録するとき、その 1 つをデバイスにとってのデフォルトとして指定します。ただし、ユーザがあとで設定を変えることもあります。ユーザが設定を変えると、デフォルトのデバイスまたはデフォルトのプロファイルが変わる場合があり、ColorSync は、デバイスマネージャによりこの変更を知らされます。デバイスマネージャは常に、どのデバイスがデフォルトかについて把握しています。

次に、デフォルトのデバイスとプロファイルを管理するための新しい API のいくつかを示します。

CMSetDefaultDevice

CMError CMSetDefaultDevice
(
 CMDeviceClass    deviceClass,
 CMDeviceID    deviceID
);

パラメータ

deviceClass

デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。

deviceID

クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。

デバイス管理層は、デバイスクラスごとに、どの登録デバイスがデフォルトかを設定することができます。これにより、カラーマネージメントの選択は最小限で済み、デフォルトプリンタを出力プロファイルの選択肢とするなど、何らかの自動機能を可能にします。deviceClass と deviceID により指定されるデバイスが登録されていない場合には、エラーが返されます。

CMSetDeviceDefaultProfileID

CMError CMSetDeviceDefaultProfileID
(
 CMDeviceClass        deviceClass,
 CMDeviceID        deviceID,
 CMDeviceProfileID    defaultID
);

指定のデバイスのデフォルトのプロファイル ID は、CMGetProfileByUse API などがあるため、重要な情報の 1 つです。この API は、ColorSync コントロールパネルにおけるユーザの選択に基づいたデバイスのデフォルトのプロファイルを返します。デバイスのドライバとホストのソフトウェアは、この API を使って指定のデバイスのデフォルトのプロファイルを取得し設定することができます。

パラメータ

deviceClass

デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。

deviceID

クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。

defaultID

このデバイスのデフォルトプロファイルの ID。

キャリブレーションのサポート

Mac OS X 上にあるこれらの新しいデバイスマネージャにより、ColorSync は現在、キャリブレーションのサポートを提供することができます。これは、ColorSync が、デバイスマネージャから渡されたプロファイルのデータによって実現されます。プロファイルは、ID とモード名(「plain paper」など)を伴って登録されます。プロファイルは、処理中は、ID により参照されます。このようなプロファイルはアプリケーションによってカスタマイズできます。たとえば、キャリブレーションアプリケーションは、指定のキャリブレーションモードにおけるファクトリプロファイルを取得し、そのモードに使用する新しいプロファイルを ID を指定して設定できます。

次に、プロファイルのカスタマイズをサポートする API を示します。

CMGetDeviceFactoryProfiles

CMError CMGetDeviceFactoryProfiles
(
 CMDeviceClass        deviceClass,
 CMDeviceID        deviceID,
 CMDeviceProfileID*    defaultID,
 UInt32*        arraySize,
 CMDeviceProfileArray*    deviceProfiles
);

この API により呼び出し側は、指定のデバイスのオリジナルのプロファイルを取得できます。取得したプロファイルは、いずれかのファクトリプロファイルが置き換えられている(更新されている)場合には、そのデバイスについて実際に使われているプロファイルとは異なる可能性もあります。実際に使われているプロファイルを取得するには、CMGetDeviceProfiles を呼び出します。

パラメータ

deviceClass

デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。

deviceID

クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。

defaultID

このデバイスのデフォルトプロファイル ID を格納する記憶領域へのポインタ。

arraySize

返される配列のサイズを格納する記憶領域へのポインタ。最初、呼び出し側は、このルーチンを呼び出してサイズを返させます。その後このルーチンを再度呼び出して配列を受け取るバッファのサイズを渡します。

deviceProfiles

プロファイルの配列を受け取るための呼び出し側の記憶領域へのポインタ。呼び出し側は最初、このパラメータに NIL を渡し、arraySize パラメータの配列のサイズを受け取ります。その後、適切な大きさの領域が割り当てられたら、その領域へのポインタをこのパラメータに渡すことにより、配列をそのメモリにコピーすることができます。

CMSetDeviceProfiles

CMError
CMSetDeviceProfiles(
  CMDeviceClass                 deviceClass,
  CMDeviceID                    deviceID,
  const CMDeviceProfileScope *  profileScope,
  const CMDeviceProfileArray *  deviceProfiles);

この API は、指定のデバイスによって使われるプロファイルを変更する手段を提供します。デバイスの登録後、キャリブレーションアプリケーションが、デバイスプロファイルをファクトリデフォルトからキャリブレートされたプロファイルに置き換えるために呼び出すことができます。この呼び出しを成功させるために、呼び出し側は、キャリブレーション対象のデバイスの CMDeviceClassCMDeviceID を渡さなければなりません(デバイスの選択と識別は、CMIterateColorDevices() API を使えば容易に行えます)。有効でない CMDeviceClass または CMDeviceID が渡されると、CMInvalidDeviceClass エラーまたは CMInvalidDeviceID エラーが返されます。

パラメータ

deviceClass

デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。

deviceID

クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。

profileScope

これらのプロファイルが関係するスコープを定義する構造体。

deviceProfiles

ファクトリプロファイルに換わるプロファイルを含むプロファイルの配列を格納する呼び出し側の記憶領域へのポインタ。この呼び出しで、オリジナルプロファイルをすべて置き換える必要はありません。したがって、配列には、プロファイルが 1 つしか含まれていない場合もあれば、ファクトリ配列にあったプロファイルがすべて置き換えられるのなら、その数だけ含まれている場合もあります。プロファイルは、ID に基づいて置き換えられます。

CMSetDeviceProfile

CMError
CMSetDeviceProfile(
  CMDeviceClass                 deviceClass,
  CMDeviceID                    deviceID,
  const CMDeviceProfileScope *  profileScope,
  CMDeviceProfileID             profileID,
  const CMProfileLocation *     deviceProfLoc);

この API は、指定のデバイスによって使われるプロファイルを、ID に基づいて変更する手段を提供します。デバイス登録後に、キャリブレーションアプリケーションが、デバイスプロファイルをファクトリデフォルトからキャリブレートされたプロファイルに置き換えるために呼び出すことができます。この呼び出しを成功させるために、呼び出し側は、キャリブレーション対象のデバイスの CMDeviceClassCMDeviceID を、設定するプロファイルの CMDeviceProfileID と一緒に渡さなければなりません(デバイスの選択と識別は、CMIterateColorDevices() API を使えば容易に行えます)。有効でない CMDeviceClass または CMDeviceID が渡されると、CMInvalidDeviceClass エラーまたは CMInvalidDeviceID エラーが返されます。

パラメータ

deviceClass

デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。

deviceID

クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。

profileScope

これらのプロファイルが関係するスコープを定義する構造体。

profileID

このデバイスのデフォルトプロファイルの ID。

deviceProfLoc

プロファイルの CMProfileLocation を格納する記憶領域へのポインタ。この構造体は、固定長の構造体なので、呼び出し側は、スタックベースの構造体、またはそのために割り当てられたメモリへのポインタを渡すことができます。

通知

アプリケーションは、システム上のデバイスに対する変更の知らせを受け取れるようになりました。ColorSync は、通知を分散通知センターに送信します(分散通知センターの詳細については、Cocoa および Core Foundation の文献を参照してください)。分散通知センターに登録しているシステムのプロセスはすべて、これらの通知を受け取ります。次に、いくつかの利用可能な通知を示します。

  • デバイスクラスのデフォルトデバイスに対する変更

  • デバイスファクトリまたはカスタムプロファイルに対する変更

  • デバイスのデフォルトのプロファイルに対する変更

  • デバイスの登録と登録解除

  • ColorSync 初期設定の任意の設定に対する変更(ユーザが優先 CMM を変更した場合など)

上記の通知を受け取るために登録を行う ColorSync API はありません - ColorSync は、これらの通知を分散通知センターに送るだけです。上記の通知を受け取るには、代わりに、次の Cocoa と Core Foundation の API を使います。

CFNotificationCenterAddObserver
NSDistributedNotificationCenter

次に、上記の関数で使用できる個別の通知文字列を示します(ColorSync インタフェースファイル、CMDeviceIntegration.h から抜粋)。

#define  kCMDeviceRegisteredNotification   CFSTR("CMDeviceRegisteredNotification")
#define  kCMDeviceUnregisteredNotification  CFSTR("CMDeviceUnregisteredNotification")
#define  kCMDeviceOnlineNotification  CFSTR("CMDeviceOnlineNotification")
#define  kCMDeviceOfflineNotification  CFSTR("CMDeviceOfflineNotification")
#define  kCMDeviceStateNotification   CFSTR("CMDeviceStateNotification")
#define  kCMDefaultDeviceNotification  CFSTR("CMDefaultDeviceNotification")
#define  kCMDeviceProfilesNotification  CFSTR("CMDeviceProfilesNotification")
#define  kCMDefaultDeviceProfileNotification
                            CFSTR("CMDefaultDeviceProfileNotification")
#define  kCMPrefsChangeDeviceNotification
                            CFSTR("AppleColorSyncPreferencesChangedNotification")

 

通知メカニズムの一般的な仕組みを示す次の Cocoa で書かれたコードは、ディスプレイプロファイルが変更されたときに通知を受け取る方法を示します。まず、必要な ColorSync デバイス通知を受け取るために、デフォルトの分散通知センターに登録をします。次に、通知を受け取ったら、単純に CMGetDefaultProfileByUse を呼び出してディスプレイプロファイルの現在の設定を調べます。

-(void)registerNotifications
{
    NSDistributedNotificationCenter *center;
    
    center = [NSDistributedNotificationCenter defaultCenter];
    
    [center addObserver:self
               selector:@selector(notification:)
                   name:kCMDeviceUnregisteredNotification
                 object:nil];
    [center addObserver:self
               selector:@selector(notification:)
                   name:kCMDefaultDeviceNotification
                 object:nil];
    [center addObserver:self
               selector:@selector(notification:)
                   name:kCMDeviceProfilesNotification
                 object:nil];
    [center addObserver:self
               selector:@selector(notification:)
                   name:kCMDefaultDeviceProfileNotification
                 object:nil];
}
-(void)notification:(NSNotification *)note
{
   CMError err = CMGetDefaultProfileByUse(cmDisplayUse, &gProfRef);
}

プロファイル変更を調べる同じようなコードを、Mac OS X Core Foundation の分散通知を使用して書くことができます(NSDistributedNotificationCenter などを使用)。詳細については、Mac OS X Core Foundation のドキュメントを参照してください。

先頭に戻る

ColorSync デバイスサポートの要約

ColorSync は現在、デバイスマネージャと統合されています。アプリケーションは、新しい ColorSync Preferences API を使って、標準装置(入力、ディスプレイ、出力)のデフォルトのプロファイルへアクセスできます。アプリケーションは、これらの API から登録デバイスに関するより具体的なプロファイル情報を取得できます。ColorSync では、キャリブレーションがサポートされるようになり、新しい通知サービスも提供されています。

先頭に戻る

ColorSync の Mac OS X v10.3 の変更箇所

Mac OS X v10.3 "Panther" における ColorSync にはいくつかの変更箇所があります。それらについて、以下で取り上げます。

ColorSync チェーン

アプリケーションによってシステムに持ち込まれ、各種の技法を使って操作される書類の最適な出力を保証するには、その過程の各段階でカラーマネージメントを行う必要があります。しかし、現実には、通常の書類がシステムの中で処理される間にカラーマネージメントが行われるかどうかは、時と場合によります。

例として、ある画像がシステム内を処理されていく過程を表す典型的な処理チェーンを以下に示します。

典型的な書類の ColorSync チェーン

  • イメージキャプチャで取得

  • Carbon アプリケーションで編集

  • QuickTime ツールを使用して別形式に変換

  • プレビューでプリント

    - Quartz によるラスタ化

    - プリンタドライバを経由してインクジェットプリンタに送信

上記は、長い処理チェーンであり、それぞれの段階でカラーマネージメントが必要になります。しかし、Mac OS X v10.2 では、このチェーンに弱いリンク、つまり正しいカラーマネージメントが行われるようにアプリケーションが余分な負担を抱えなければならない場所がありました。このような弱いリンクの例としては、後述のものがあります。

先頭に戻る

ColorSync チェーンの弱いリンク

  • イメージキャプチャで取得

    - プロファイルを登録するカメラが少ない

  • Carbon アプリケーションで編集

  • QuickTime ツールを使用して別形式に変換

    - QuickTime アプリケーションは、埋め込みプロファイルを明示的に確認する必要がある

  • プリンタの色空間へ変換

    - プロファイルを登録しないプリンタもある

Mac OS X v10.3 では変更が加えられ、アプリケーションが可能な限り容易に正しい出力を得られるようになっています。次に変更点のリストを示します。

先頭に戻る

ColorSync チェーンの固定リンク

  • イメージキャプチャで取得

    - すべてのカメラに対応する汎用のカメラプロファイルが登録されている

  • Carbon アプリケーションで編集

  • QuickTime ツールを使用して別形式に変換

    - QuickTime が書類に埋め込まれているプロファイルを考慮するようになった

  • プリンタの色空間へ変換

    - PostScript および CUPS ラスタドライバがプロファイルを登録できるようになった

先頭に戻る

印刷におけるカラーマネージメント

Mac OS X のカラーマネージメントの重要な特徴の 1 つに、プリントシステムのカラーマネージメントがあります。Mac OS X におけるプリントは、フロントエンドおよびバックエンドの 2 つの主要な要素で構成されます。フロントエンドの主要な役割は、プリンタを選び、必要なプリントオプションを取得し、プリントジョブを PDF としてスプールすることです。

バックエンドの主要な役割は、スプールされた PDF をプリンタに合った適切な形式に変換することです。

プリントフロントエンドをさらに詳しく見ると、スプール PDF の色データはすべてプロファイルがタグ付けされていることに気づきます。本質的に、フロントエンドでプリンタ固有の色変換が行われることはありませんが、プリントシステムが ColorSync デバイス統合化データベースに照会を行い、現在のプリント条件に合致するプロファイルを取得するという点に留意することが重要です。

バックエンドで何が行われるかは、使用するプリンタのタイプによって異なります。

ラスタプリンタの場合、スプール PDF はラスタ化され、色データはプリンタプロファイルに変換されます。これは、プリンタプロファイルをプリントジョブから抽出することによって実現されます。プロファイルが存在しなければ、プリントシステムはデフォルトのプロファイルを提供することでマッチングを可能にします。

PostScript プリンタの場合には、選択肢が 2 つあります。最初の選択肢は、プリンタにおける従来のカラーマッチングです。この場合、スプール PDF のすべてのプロファイルが PostScriopt CSA に変換されます。

ColorSync によるホスト上での新しいカラーマッチング

Panther では、ColorSync を使用してコンピュータ上でカラーマッチングを行う新しい選択肢があります。この場合、ラスタプリントと同様に、プロファイルはプリントジョブから取得されます。プロファイルが存在しなければ、プリントシステムはデフォルトのプロファイルを提供することでカラーマッチングを可能にします。

先頭に戻る

新しい PPD 宣言エントリ

CUPS PostScript ドライバおよびラスタドライバ用に、PPD ファイルに cupsICCProfile という新しいキーワードが追加されました。この新しいキーワードを使用して、デバイスのさまざまなモードに加えて、それぞれのモードのプロファイルを指定できます。この新しいエントリの形式は次のとおりです。

リスト 1. 新しい PPD 宣言エントリ

*cupsICCProfile {モード指定子} {プロファイル指定子}

ここで「モード指定子」は、色モデル、メディアタイプ、および解像度の 3 つのフィールドを連結したものです。モデル/メディア/解像度を指定するいずれのフィールドも省略可能です。「プロファイル指定子」は、プロファイルの標準ファイルパスで、/usr/share/cups/profiles/ からの相対パスを指定します。

次の例は、2 つのモードを登録する PostScript プリンタ PPD ファイルの例です。600×600 dpi および 1200×1200 dpi の 2 つのモードにそれぞれプロファイル指定子が続いています。

リスト 2. 2 つのモードを登録する PostScript PPD ファイルの例

*%========================
*% Device capabilities
*%========================


*ColorDevice: True


*DefaultColorSpace: CMYK


*cupsICCProfile ..600x600dpi "cmykProfile600dpi.icc"
*cupsICCProfile ..1200x1200dpi "cmykProfile1200dpi.icc"

この新しい PPD キーワードについては、テクニカル Q&A QA1352「New PPD keywords available in Mac OS X version 10.3」 でも詳しく説明しています。

先頭に戻る

Quartz フィルタ

Quartz フィルタは、Quartz のイメージングおよびカラーマッチングのパイプラインにおける新しいオプションコンポーネントです。Quartz フィルタを使用して、1 つの画像に一連のイメージング処理と色補正処理を関連付けられます。フィルタは、すべての描画処理あるいは特定の描画処理のセットのどちらも対象にできます。フィルタを構成して、特殊なイメージング処理や色処理を行うようにできます。また、フィルタを XML 形式で定義して保存することも可能です。

次に、Quartz フィルタコンポーネントが Quartz のアーキテクチャにどのように組み込まれているかを示します。

Quartz Filter Component in the Quartz Architecture.

図 14. Quartz アーキテクチャにおける Quartz フィルタコンポーネント

Quartz フィルタは現時点では、Mac OS X システムのユーティリティおよびアプリケーションを通じてのみ利用できます。しかし、新しい API セットの提供も予定されています。

Quartz フィルタのデモ

先頭に戻る

ソフトプルーフ(色校正)

プリントダイアログから Quartz フィルタを利用したソフトプルーフが可能になりました。単純にプリントダイアログの「プレビュー」ボタンをクリックすると、「プレビュー」ウィンドウの左下角に「ソフトプルーフ」というタイトルのチェックボックスが表示されます。次のように表示されます。

New soft-proofing feature.

図 15. 新しいソフトプルーフ機能

先頭に戻る

プリントダイアログ

図に示した画像は、非常に暗いように見えます。新しい ColorySync プリンタダイアログ拡張(PDE)を使用すれば、これを補正できます。

新しい ColorSync PDE 機能にアクセスするには、プリントダイアログを開き、メニューリストの中で「ColorSync」という項目を探します。

New ColorSync PDE.

図 16. 新しい ColorSync PDE

この新しい ColorSync PED によって、PostScript プリンタでは「カラー変換」ポップアップメニューを通じて、どのカラーマッチングオプションを使用するかを選べるようになりました。「標準」または「プリンタのカラー」のどちらかを選択します。

Color conversion selection.

図 17. カラー変換の選択

カラー変換オプションを使用することで、プリンタプロファイルを使用してコンピュータ上でカラーマッチングを行うことも(「標準」を選択)、プリントパスにおける従来のカラーマッチング(「プリンタのカラー」を選択)を利用することもできます。

最後に、新しい ColorSync PDE の「Quartz フィルタ」メニューの最後に、プリント時に Quartz フィルタを追加するオプションがあります。

Quartz filters menu option.

図 18. 「Quartz フィルタ」のメニュー項目

このオプションを選択すると、書類が PDF としてスプールされ、ColorSync ユーティリティに「オープン」('oapp')AppleEvent とともに送り出されます。ユーティリティは、次の図に示すようにフィルタインスペクタウィンドウを使用して書類を開きます。

Filter inspector window.

図 19. フィルタインスペクタウィンドウ

リストの任意のフィルタをクリックし、「プレビュー」チェックボックスもクリックすると、選択したフィルタを適用した結果を見ることができます。「新規」ボタンおよび「削除」ボタンをクリックしてフィルタの追加と削除が行えます。

それぞれのフィルタについて、管理可能ないくつかの異なるオプションがあります。次のものが含まれます。

  • カラー - 色変換のオプション

  • デフォルトプロファイル

  • イメージサンプリング / 圧縮 / 回旋

  • フィルタドメイン

  • PDF パラメータ

先頭に戻る

Panther における ColorSync ユーティリティの変更箇所

ColorSync 初期設定の新しい場所

ColorSync 初期設定の場所が ColorSync ユーティリティに移されました(以前は、システム環境設定に含まれていました)。これに伴い、ColorSync ユーティリティが今まで以上に ColorSync 関連のあらゆる設定に利用できる「ワンストップショップ」となります。

また、多くのアプリケーションでは、プログラムのユーザインタフェースの中に、ユーザを ColorSync 初期設定に導くボタンを用意することがよく知られています。これは通常、CMLaunchColorSyncPreferences 関数を呼び出すことで実現されます。この関数を使用するアプリケーションは、Panther でも正しく動作します。この関数は、ColorSync ユーティリティを呼び出すようになりました。

先頭に戻る

Quartz フィルタのサポート

ユーザは、ColorSync ユーティリティから Quartz フィルタにアクセスできます。Quartz フィルタの詳細については、「Quartz フィルタ」を参照してください。

先頭に戻る

管理機能

ColorSync ユーティリティには、システム管理ユーザが同じマシン上の他のユーザが使用できるデフォルトのプロファイルを指定するための新しい管理機能が含まれています。

先頭に戻る

プロファイルビューアの新しい 3D 表示オプション

ColorSync ユーティリティの 3D プロファイルビューアには、プロファイルを Lab、Luv、Yxy、その他の各種色空間で表示するための新しいコンテキストメニューがあります。次のように表示されます。

New 3D viewer contextual menu.

図 20. 新しい 3D ビューアのコンテキストメニュー

プロファイルビューアを使用して 2 つのプロファイルのガマットを比較することも可能です。比較するプロファイルのペアの最初の対象を指定するために、「比較のために保留」という新しいコンテキストメニュー項目が追加されています。ビューアペイン内のプロファイルの上で、Control キーを押しながらクリックしてコンテキストメニューを表示させ、「比較のために保留」を選択します。次の図のように、選択されたことを示すためにプロファイルの色が薄くなります。

New Hold for comparison menu item.

図 21. 新しい「比較のために保留」メニュー項目

続いて、リストから別のプロファイルを選択すると、ビューアペインに両方のプロファイルが同時に表示され、重なりも分かります。

Comparing the gamut of two profiles.

図 22. 2 つのプロファイルのガマットの比較

先頭に戻る

新しい ColorSync API

開発者が ColorSync と OpenGL(詳細については、「ColorSync と OpenGL」を参照)を使用してリアルタイムでの色補正をさらに容易に行えるように、ColorSync にいくつかの新しい API が追加されました。これらの新しい API について、以下で説明します。

最初の新しい API は CMMakeProfile です。CMMakeProfile 関数の定義は次のとおりです。

CMMakeProfile

CMMakeProfile
                 
CMError CMMakeProfile(CMProfileRef prof,
                      CFDictionaryRef spec)

説明

ディスプレイプロファイルまたは抽象プロファイルが仕様辞書に基づくように、プロファイルに適切なタグを追加します。

パラメータ

prof(in/out)

修正対象のプロファイル。

spec(in)

仕様辞書

仕様辞書のキーの 1 つは "profileType" でなければならず、その値は CFString 値で "abstractLab"、"displayRGB" または "displayID" のいずれかでなければなりません。また、次のキーまたは値が含まれることもあります。

"description" CFString(省略可能)

"copyright" CFString(省略可能)

profileType が "abstractLab" の場合、辞書には次のキーまたは値も含まれている必要があります。

"gridPoints" CFNumberSInt32)(奇数でなければならない)

"proc" CFNumber(SInt64)

LabToLabProcPtr から変換)

"refcon" CFNumber(SInt64)(省略可能)

(void から変換)

profileType が "displayRGB" の場合、辞書には次のキーまたは値も含まれている必要があります。

"targetGamma" CFNumberFloat)(例: 1.8)(省略可能)

"targetWhite" CFNumberSInt32)(例: 6500)(省略可能)

"gammaR" CFNumberFloat)(例: 2.5)

"gammaG" CFNumberFloat)(例: 2.5)

"gammaB" CFNumberFloat)(例: 2.5)

"tableChans" CFNumberSInt32)(1 または 3)(省略可能)

"tableEntries" CFNumberSInt32)(例: 16 または 255)(省略可能)

"tableEntrySize" CFNumberSInt32)(1 または 2)(省略可能)

"tableData" CFData(RRRGGGBBB の順で lut)(省略可能)

以下

"phosphorRx" CFNumberFloat

"phosphorRy" CFNumberFloat

"phosphorGx" CFNumberFloat

"phosphorGy" CFNumberFloat

"phosphorBx" CFNumberFloat

"phosphorBy" CFNumberFloat

または以下

"phosphorSet" CFString("WideRGB"、"700/525/450nm"、

"P22-EBU"、"HDTV"、"CCIR709"、"sRGB"、

"AdobeRGB98" または "Trinitron")

以下

"whitePointx" CFNumberFloat

"whitePointy" CFNumberFloat

または以下

"whiteTemp" CFNumberSInt32)(例: 5000、6500、9300)

profileType が "displayID" の場合、辞書には次のキーまたは値も含まれている必要があります。

"targetGamma" CFNumberFloat)(例: 1.8)(省略可能)

"targetWhite" CFNumberSInt32)(例: 6500)(省略可能)

"displayID" CFNumberSInt32

あるいは、"displayRGB" に対するキーまたは値をディスプレイの値をオーバーライドするために指定できます。

次のコードは、CMMakeProfile を使用して抽象プロファイルを作成する方法を示します。

void myLabToLabProc(float* L, float* a, float* b, void* refcon)
{
    float angle = *(float*)refcon;
    float aa = (*a), bb = (*b);
    *a = aa*cos(angle) - bb*sin(angle);
    *b = aa*sin(angle) + bb*cos(angle);
}

void makeAbstractWithAngle (CMProfileRef prof, float angle)
{
    CFDictionaryRef dict;
    SInt64 cb64, rc64;
    SInt32 gridPoints;
    CFStringRef keys[4];
    CFTypeRef vals[4];
    CMError cmErr;
    
    keys[0] = CFSTR("profileType");
    vals[0]= CFSTR("abstractLab");

    gridPoints = 33;
    keys[1] = CFSTR("gridPoints");
    vals[1]= CFNumberCreate(0, kCFNumberSInt32Type, &gridPoints);

    cb64 = (SInt64) myLabToLabProc;
    keys[2] = CFSTR("proc");
    vals[2]= CFNumberCreate(0, kCFNumberSInt64Type, &cb64);
    
    rc64 = (SInt64) ∠
    keys[3] = CFSTR("refcon");
    vals[3]= CFNumberCreate(0, kCFNumberSInt64Type, &rc64);
    
    dict = CFDictionaryCreate(nil, keys, vals, 4,
                &kCFTypeDictionaryKeyCallBacks,
                &kCFTypeDictionaryValueCallBacks);
    
    cmErr = CMMakeProfile(prof, dict);
    
    CFRelease(vals[1]); CFRelease(vals[2]); CFRelease(vals[3]);
    CFRelease(dict);
}

 

ビデオ出力のリアルタイム色補正をサポートするために追加されたもう 1 つの API は CWFillLookupTexture です。この API は、ColorSync カラーワールド参照を受け取り、ビデオカードへのロードに適したテーブルを埋めます。

CMMakeProfile 関数の定義は次のとおりです。

CWFillLookupTexture

CWFillLookupTexture

          CMError CWFillLookupTexture( CMWorldRef cw,
                                       UInt32 gridPoints,
                                       UInt32 format,
                                       UInt32 dataSize,
                                       void * data)

説明

この API は、カラーワールドに基づいて 3D の参照テクスチャを埋めます。結果のテーブルは、ハードウェアでのカラーマネージメントの高速化のために OpenGL での使用に適しています。

パラメータ

cw(in)

使用するカラーワールド。

gridPoints(in)

テクスチャ内のチャネルごとのグリッドポイント数。

format(in)

テクスチャ内のピクセルの形式(例: cmTextureRGBtoRGBX8)。

dataSize(in)

データを埋めるテクスチャのバイト単位のサイズ

data(in/out)

データを埋めるテクスチャへのポインタ

次に、この CWFillLookupTexture の使用法を示す短いコード例を示します。

void* make_3d_texture(CMProfileRef src, CMProfileRef abs, CMProfileRef dst)
{
    UInt32 size, grid = 9, fmt = cmTextureRGBtoRGBX8;
    CMWorldRef cw;
    void* data;
    CMError err;
    
    cw = make_colorworld(src, abs, dst);
    err = CWFillLookupTexture(cw, grid, fmt, &size, nil);
    data = malloc(size);
    err = CWFillLookupTexture(cw, grid, fmt, &size, &data);
    
    return data;
}

先頭に戻る

ColorSync と OpenGL

ColorSync と OpenGL を使用してビデオ出力のリアルタイムでの色補正と改善が行えます。これまでは、このような処理は非常にハイエンドのハードウェアでのみ可能でしたが、現在は高性能なビデオカードが入手できるようなったおかげで、デスクトップでも可能になりました。

最近の多くのビデオカードでは、ピクセル単位の 3D テクスチャ参照がサポートされています。現時点では、次のビデオカードで利用可能です。

  • nVidia GeoForce TI

  • ATI Radeon 9000 シリーズ

色補正変換をこれらのテーブルにロードすることで、リアルタイムでの色補正を実現できます。これは非常に強力であり、Mac OS X で利用可能なすべてのグラフィックス技術の総合力を示すものです。ColorSync、OpenGL、QuickTime、および Quartz の利点と能力の組み合わせたものとなります。

仕組みとしては、QuickTime コンテンツが Quartz OpenGL サーフェスで再生され、そのサーフェスに ColorSync カラーワールド参照に基づく 3D テクスチャがアタッチされているというものです。

アプリケーションでこれを容易に実現できるように、ColorSync にいくつかの新しい API が追加されました。最初の 1 つが CMMakeProfile です。これは汎用の関数で、属性の CFDictionary を渡して ColorSync プロファイルを作成することができます。たとえば、この API を使用して、色相の回転、コントラストの設定、その他を行うための抽象プロファイルを作成できます。またこの API を使用して標準 RGB プロファイルを作成することも可能です。

2 つ目の新しい API は CWFillLookupTexture です。この API は、カラーワールドに基づいて 3D の参照テクスチャを埋めます。結果のテーブルは、ハードウェアでのカラーマネージメントの高速化のために OpenGL での使用に適しています。

これらの新しい API の詳細については、「新しい ColorSync API」を参照してください。

また、Mac OS X Developer Tools にサンプルコードもあります。サンプルコードは、上に示した API を使用してリアルタイムでの色補正を行う方法を示します。Mac OS X Developer Tools をダウンロードして、次の場所にある "ColorWhirled" サンプルを探してください。

/Developer/Examples/ColorSync/ColorWhirled

先頭に戻る

ディスプレイのキャリブレーション

ディスプレイのキャリブレーションは、Mac OS X の以前のすべてのバージョンに存在した機能です。ディスプレイのプロファイルをユーザが自動的に生成し、ディスプレイを簡単な操作で補正する手段を提供します。ディスプレイのキャリブレーションは、「ディスプレイ」初期設定(システム環境設定内にあります)の「補正」ボタンをクリックして実施します。

以前までは、このボタンをクリックすると Apple キャリブレータが呼び出されました。サードパーティ製のキャリブレータもサポートされていましたが、システムには組み込まれていませんでした。Mac OS X v10.3 では、サードパーティ製のキャリブレータに対するサポートがアーキテクチャに追加されました。

キャリブレータを ColorSync に認識してもらうには、いくつかの簡単な修正を加える必要があります。以下に簡単にまとめます。

独自キャリブレータに対するサポート

  • 通常どおりに Carbon または Cocoa キャリブレーションアプリケーションを作成します。

  • Info.plist に新しい CSDisplayCalibrator キーを追加します。

  • 'oapp' AppleEvent で新しい省略可能プロパティをサポートします。

  • キャリブレータを /Library/ColorSync/Calibrators/ にインストールします(または、そこにシンボリックリンクを作成します)。

参考にできるように、Developer Tools とともにインストールされるキャリブレータのサンプルが次の場所にあります。

/Developer/Examples/ColorSync/

「DemoCalibrator」というプロジェクトがあるはずです。このサンプルコードは、キャリブレータに上記の変更を加える方法を示すものです。このサンプルを自分のキャリブレータの出発点として利用してください。

仕組みを知るために、このサンプルキャリブレータをビルドし、ビルドした実行可能ファイルを /Library/ColorSync/Calibrators/ にインストールします。次に、ディスプレイ初期設定(システム環境設定内)を開き、「カラー」タブをクリックしてから「補正」ボタンをクリックします。すると、新しいダイアログが表示され、インストール済みのキャリブレータから使用するものを選べます。ダイアログは次のように表示されます。

Dialog for choosing a Calibrator.

図 23. キャリブレータ選択ダイアログ

先頭に戻る

Apple キャリブレータの変更箇所

Mac OS X v10.3 の Apple キャリブレータでは、いくつかの機能が強化されています。それらの実際の動作を知るには、「ディスプレイ」初期設定を開き、「カラー」タブをクリックしてから「補正」ボタンをクリックし、最後にリスト内の「ディスプレイキャリブレータ」(Apple キャリブレータ)を選択します。次に「補正」ボタンをクリックし、表示されたウィンドウで「詳細モード」チェックボックスをクリックして詳細モードを有効にします。Apple キャリブレータの強化された機能を見るにはこのモードにしておく必要があります。

Apple キャリブレータの新しい機能には、より詳細な制御を可能にする、シングルパッチを表示する機能、および濃淡と輝度を調整する機能があります。この機能強化は、青のガンマが人間の目には他より見にくく、ユーザが調整するのが難しいために行われました。

また、Apple キャリブレータでは複数のステップが可能です。つまり、中間階調の調整の加え、ハイライト、影、濃い影の調整も可能になりました。結果として、複雑なガンマ曲線を持つ液晶ディスプレイで優れたキャリブレーションを実現できます。

最後に、Apple キャリブレータでは、キャリブレーションプロファイルを同じマシン上の他のユーザが使用することも可能です。

先頭に戻る

SIPS

SIPS は、Scriptable Image Processing System(スクリプト可能イメージ処理システム)の略です。SIPS は、スクリプトを使用して画像ファイルに対して多くの一般的な操作が行えるツールが必要と考えられたために作成されました。

すでに、画像の操作を行うための技術はいくつか存在します。たとえば、ColorSync Scripting では、画像のカラーマッチングを含むさまざまな処理が可能ですが、形式の回転、拡大縮小、変換はできません。Image Capture Scripting では、画像の回転は可能ですが、カラーマッチングおよび形式の変換はできません。最後に、プレビューアプリケーションは、画像の回転、拡大縮小、形式の変換は可能ですが、AppleScript に対応していません。

SIPS は、これらの異なる技術をすべて統合し、画像を対象に一般的な操作を行う単独のツールを提供します。SIPS の現在の機能のセットには次が含まれます。

  • 各種ラスタイメージ形式の読み書きと変換

  • jpeg(Jfif および Xiff)、GIF、PNG

  • 基本的画像処理

  • 回転、反転、切り取り、パディング、再サンプリング、解像度変更

  • カラーマネージメント操作

  • プロファイルの埋め込み、抽出、調整

  • 既知のメタデータタグの読み書き

  • 可能な限りのオリジナルコンテンツの維持

SIPS の将来のリリースで考えられる機能は次のとおりです。

  • 複雑な形式のサポート

  • マルチレイヤ、マルチページ、またはベクターベース

  • 高度な画像処理

  • ぼかし、シャープ、強調、その他

  • メタデータタグの読み書き(メタデータの数は常に増えており、もっと多くに対応したいと考えています)

SIPS は現在単純なコンパイル済みのツールとして実装されており、/usr/bin/sips にインストールされています。SIPS は CoreGraphics、QuickTime および ColorSync にリンクされています。一度に 1 つまたは複数のファイルを対象に処理が行えます。また、画像およびプロファイルの照会と変更が可能です。SIPS のクエリは、プロパティを単純なテキスト形式または XML 形式で返せます。アクションは、ファイルにそのまま変更を加えることも、出力ディレクトリの中で変更を加えることもできます。

SIPS は単純なコマンドラインツールなので、さまざまな使い方があります。ターミナルのシェルから起動することも、AppleScript から、他のスクリプティング言語から、あるいはアプリケーションから C 言語のコードを使って(AppKit または Posix 呼び出し)起動することもできます。

たとえば、ターミナルを開いて sips --help とタイプします。SIPS のヘルプページが表示されます(標準の man ページの提供が予定されています)。次のように表示されます。

$ sips --help

sips 1.0 - scriptable image processing system.
This tool is used to query or modify raster image files and ColorSync ICC profiles.
Its functionality can also be used through the "Image Events" AppleScript suite.
Usages:
sips [-h, --help]
sips [-H, --helpProperties]
sips [image query functions] imagefile(s)
sips [profile query functions] profile(s)
sips [image modification functions] imagefile(s)
[--out outimage | --out outdir]
sips [profile modification functions] profile(s)
[--out outprofile | --out outdir] Profile query functions:
-g, --getProperty key
-X, --extractTag tag tagFile
-v, --verify
Image query functions:
-g, --getProperty key
-x, --extractProfile profile
Profile modification functions:
-s, --setProperty key value
-d, --deleteProperty key
--deleteTag tag
--copyTag srcTag dstTag
--loadTag tag tagFile
--repair
Image modification functions:
-s, --setProperty key value
-d, --deleteProperty key
-e, --embedProfile profile
-E, --embedProfileIfNone profile
-m, --matchTo profile
-M, --matchToWithIntent profile intent
-r, --rotate degreesCW
-f, --flip horizontal|vertical
-c, --cropToHeightWidth pixelsH pixelsW
-p, --padToHeightWidth pixelsH pixelsW
-z, --resampleHeightWidth pixelsH pixelsW
--resampleWidth pixelsW
--resampleHeight pixelsH
-Z, --resampleHeightWidthMax pixelsWH
-i, --addIcon

次は、SIPS コマンドを使用して画像を 30 度回転させる例です。

$sips -r 30 /Users/steve/image.JPG

次は、SIPS コマンドを使用して画像のプロパティ(画像の高さ)を取得する例です。

まず、--helpProperties コマンドを使用して、利用可能な画像のプロパティを取得します。

$sips --helpProperties

  Special properties:
    all                  binary data
    allxml               binary data
  Image properties:
    dpiHeight            float
    dpiWidth             float
    pixelHeight          integer (read-only)
    pixelWidth           integer (read-only)
    format               string  jpeg | tiff | png | gif | jp2 | pict | bmp | qtif | psd
    formatOptions        string  default | [low|normal|high] | packbits
    space                string  (read-only)
    samplesPerPixel      integer (read-only)
    bitsPerSample        integer (read-only)
    creation             string  (read-only)
    make                 string
    model                string
    software             string  (read-only)
    description          string
    copyright            string
    artist               string
    profile              binary data
  Profile properties:
    description          utf8 string
    size                 integer (read-only)
    cmm                  string
    version              string
    class                string  (read-only)
    space                string  (read-only)
    pcs                  string  (read-only)
    creation             string
    platform             string
    quality              string  normal | draft | best
    deviceManufacturer   string
    deviceModel          integer
    deviceAttributes0    integer
    deviceAttributes1    integer
    renderingIntent      string  perceptual | relative | satuation | absolute
    creator              string
    copyright            string
    md5                  string  (read-only)

次に、画像プロパティ修飾子を指定してコマンドを実行します。

$ sips -g dpiHeight image.JPG

image.JPG
  dpiHeight: 216.000

先頭に戻る

参考資料

先頭に戻る

ドキュメントの改訂履歴

日付メモ
2004-06-25各種書式の変更
2004-06-16ColorSync の Mac OS X v10.3 における変更箇所の説明
2003-02-10文書新規作成

掲載日: 2004-06-25